#ifndef __APP_IOT_CTRL_H__
#define __APP_IOT_CTRL_H__

#include <stdint.h>

#ifdef __cplusplus
extern "C" {
#endif

// 定义LED控制功能的启用标志
#define APP_LED_CTRL_ENABLE     (1)
// 定义Socket控制功能的启用标志
#define APP_SOCKET_CTRL_ENABLE  (0)

// 定义LED控制IO口
#define APP_LED_CTRL_IO         (2)
// 定义Socket控制IO口
#define APP_SOCKET_CTRL_IO      (2)
// 定义按钮控制IO口
#define APP_BUTTON_CTRL_IO      (0)

/**
 * @brief 断电后上电状态配置
 */
typedef enum {
    POWER_ON_STATE_LAST = 0,    // 保持断电前状态
    POWER_ON_STATE_ON = 1,      // 默认开启
    POWER_ON_STATE_OFF = 2,     // 默认关闭
} power_on_state_t;

/**
 * @brief 设备状态
 */
typedef struct {
    uint8_t led_on : 1;         // LED状态
    uint8_t socket_on : 1;      // Socket状态
    uint8_t led_enabled : 1;    // LED启用状态
    uint8_t child_lock : 1;     // 儿童安全锁状态
    uint8_t power_on_state : 2; // 断电后上电状态配置
    uint8_t reserve : 2;        // 保留字段
} app_iot_device_state_t;

/**
 * @brief 控制类型
 */
typedef enum
{
    IOT_CTRL_TYPE_CN8023A = 0,
} iot_ctrl_type_t;

/**
 * @brief 控制结构体
 */
typedef struct
{
    iot_ctrl_type_t type;   // 控制类型
    int value;              // 控制值
} iot_ctrl_t;

/**
 * @brief 初始化IoT控制模块
 * 初始化IoT控制模块，包括LED控制和Socket等控制
 * @return 初始化结果
 */
int app_iot_ctrl_init(void);

/**
 * @brief 控制LED
 * 控制LED的亮灭
 * @param level 亮灭状态
 * @return 控制结果
 */
int app_iot_ctrl_led(int level);

/**
 * @brief 控制Socket
 * 控制Socket的开关
 * @param level 开关状态
 */
int app_iot_ctrl_socket(int level);

/**
 * @brief 解析MQTT数据
 * 解析MQTT数据
 * @param data 数据
 * @param len 数据长度
 */
int app_iot_ctrl_data_parse(const char *data, int len);

/**
 * @brief 启动LED闪烁
 * 启动LED闪烁
 * @param flash_ms 闪烁时间
 */
int app_iot_ctrl_led_flash_start(uint32_t flash_ms);

/**
 * @brief 停止LED闪烁
 */
int app_iot_ctrl_led_flash_stop(void);

/**
 * @brief 发送控制命令到队列
 * 发送控制命令到队列
 * @param iot_ctrl 控制命令
 */
int app_iot_ctrl_with_queue(iot_ctrl_t *iot_ctrl);

/**
 * @brief 获取设备状态
 * 获取设备状态
 * @return 设备状态
 */
app_iot_device_state_t *app_iot_ctrl_get_device_state(void);

/**
 * @brief 设置儿童安全锁
 * 设置儿童安全锁
 * @param lock 儿童安全锁状态
 * @return 设置结果
 */
int app_iot_ctrl_set_child_lock(uint8_t lock);

/**
 * @brief 设置LED状态
 * 设置LED状态
 * @param enabled 是否启用LED
 */
int app_iot_ctrl_set_led_state(uint8_t enabled);

/**
 * @brief 设置断电后上电状态
 * @param state 上电状态配置
 * @return 设置结果
 */
int app_iot_ctrl_set_power_on_state(power_on_state_t state);

/**
 * @brief 获取断电后上电状态
 * @return 上电状态配置
 */
power_on_state_t app_iot_ctrl_get_power_on_state(void);

#ifdef __cplusplus
}
#endif

#endif  /* __APP_IOT_CTRL_H__ */
